// JavaScript Document
/*DEFINICION DE FUNCIONES Y VARIABLES GLOBALES*/

	var misPuntosHash = new Hashtable(); ////hash de todos los puntos, accesible por id del punto
	var misGruposHash = new Hashtable(); ////hash de todos los grupos, accesible por id del grupo
	var misPuntosMarkersHash = new Hashtable(); //hash con los Markers de los puntos (se van creando a medida que se hacen visibles)

	var puntosSeleccionadosId = new Array();

	var puntosSeleccionadosHeredadosId = new Array();

	var misPuntosVisiblesId = new Array();
	if (trim(PUNTOSVISIBLES_string)!='')
		misPuntosVisiblesId = PUNTOSVISIBLES_string.split(",");

	var highlightCircle = null; //Circulo rojo que se marca en ciertos punto para denotar su seleccion...
	var highlightTimeOut = 0;

	function getUrlImgTipoPunto(tipo){
		switch (tipo) {
			case 0: return('images/gmapIcons/newPoint.png'); break;
			case 1: return('images/gmapIcons/casaPoint.png'); break;
			case 2: return('images/gmapIcons/oficinaPoint.png'); break;
			case 3: return('images/gmapIcons/estacionPoint.png'); break;
			case 4: return('images/gmapIcons/hotelPoint.png'); break;
			case 5: return('images/gmapIcons/cafePoint.png'); break;
			case 6: return('images/gmapIcons/cocheraPoint.png'); break;
			case 7: return('images/gmapIcons/peajePoint.png'); break;
			case 8: return('images/gmapIcons/terminalPoint.png'); break;
			default: return('images/gmapIcons/newPoint.png'); break;
		}
	}

	function removeHighlightPointMarker(){
		if (highlightCircle){
			map.removeOverlay(highlightCircle);
			highlightCircle=null;
		}
	}

	function highlightPointMarker(idPoint){
	  point = new GLatLng(parseFloat(misPuntosHash.get(idPoint.toString()).latitud),parseFloat(misPuntosHash.get(idPoint.toString()).longitud));
      polyPoints = Array();
      if (highlightCircle) {
        map.removeOverlay(highlightCircle);
      }
      mapNormalProj = G_NORMAL_MAP.getProjection();
      mapZoom = map.getZoom();
      clickedPixel = mapNormalProj.fromLatLngToPixel(point, mapZoom);
      polySmallRadius = 20;
      polyNumSides = 20;
      polySideLength = 18;
      for (a = 0; a<(polyNumSides+1); a++) {
	    aRad = polySideLength*a*(Math.PI/180);
	    polyRadius = polySmallRadius;
       	pixelX = clickedPixel.x+6 + polyRadius * Math.cos(aRad);
	    pixelY = clickedPixel.y-6 + polyRadius * Math.sin(aRad);
	    polyPixel = new GPoint(pixelX,pixelY);
	    polyPoint = mapNormalProj.fromPixelToLatLng(polyPixel,mapZoom);
	    polyPoints.push(polyPoint);
      }
      highlightCircle = new GPolygon(polyPoints,"#000000",2,0.0,"#FF0000",.5);
      map.addOverlay(highlightCircle);
	  clearTimeout(highlightTimeOut);
	  highlightTimeOut = setTimeout ( "removeHighlightPointMarker();", 5000 );
   }

   function addOptionsToGrupoSelector(){
		var misGruposList = misGruposHash.values();
		if (misGruposList.length>0){
		   selector = document.getElementById('gruposPunto');
		   selector.options.length=0; //remove all options
		   newOption = document.createElement('option');
		   newOption.value = '0';
		   newOption.text = '';
		   try {
    			selector.add(newOption, null); // para todos los browsers (STANDART)
			   }
		  catch(ex) {
			    selector.add(newOption); // para IE
			   }
		   for (var i=0; i<misGruposList.length; i++){
			 if (misGruposList[i]!='toJSONString'){
				 newOption = document.createElement('option');
				 newOption.value = misGruposList[i].id;
				 newOption.text = misGruposList[i].nombre;
				   try {
    					selector.add(newOption, null); // para todos los browsers (STANDART)
					   }
				  catch(ex) {
					    selector.add(newOption); // para IE
					   }
			 }
		   }
		}
	}

   function createPopUpPoint(e, idPoint, element){
	   PopUpMenuMap = new PopupMenu();

	   if (indexOfArray(misPuntosVisiblesId,idPoint.toString())!=-1){
		    PopUpMenuMap.add('Ocultar', function(target) {
		   		ocultarPunto(idPoint.toString());
	   		});
	 	    PopUpMenuMap.add('Localizar en el mapa', function(target) {
				centrar(misPuntosHash.get(idPoint.toString()).latitud,misPuntosHash.get(idPoint.toString()).longitud);
				highlightPointMarker(idPoint.toString());
	  	    });
	   }
	   else
	   		PopUpMenuMap.add('Ver', function(target) {
				mostrarPunto(idPoint.toString());
	  	    });

	   PopUpMenuMap.addSeparator();
	   PopUpMenuMap.add('Modificar', function(target) {
    	  modificarPunto(idPoint.toString());
	   });
	   PopUpMenuMap.add('Eliminar', function(target) {
	      eliminarPuntos(idPoint.toString());
	   });
	   PopUpMenuMap.addSeparator();
	   if (OBJETIVO == 3){ //SE PUEDE PUBLICAR
		   if (parseInt(misPuntosHash.get(idPoint.toString()).publico))
		   		PopUpMenuMap.add('Dejar de publicar', function(target) {
	      			publicarPuntos(false, idPoint.toString());
	   			});
	   	   else
	   			PopUpMenuMap.add('Publicar', function(target) {
	      			publicarPuntos(true, idPoint.toString());
	  			});
	   }
	   if (parseInt((misPuntosHash.get(idPoint.toString()).seguro)))
	   		PopUpMenuMap.add('Desmarcarlo como seguro', function(target) {
				seguroPuntos(false, idPoint.toString());
	   		});
	   else
	   		PopUpMenuMap.add('Marcar como seguro', function(target) {
				seguroPuntos(true, idPoint.toString());
	   		});
	   PopUpMenuMap.setSize(140, 0);
	   PopUpMenuMap.bind(element); // target is this pre block
	   PopUpMenuMap.show(e);
	   return false;
	   }

	   function createPopUpGroup(e, idGrupo, element){

	   PopUpMenuMap = new PopupMenu();

	   PopUpMenuMap.add('Modificar', function(target) {
    	  modificarGrupo(idGrupo.toString());
	   });
	   PopUpMenuMap.add('Eliminar', function(target) {
	      eliminarGrupos(idGrupo.toString());
	   });
	   PopUpMenuMap.addSeparator();
	   PopUpMenuMap.add('Seleccionar todo', function(target) {
          checkedGrupo(idGrupo.toString(), true);
	   });
	   PopUpMenuMap.add('No seleccionar ninguno', function(target) {
	      checkedGrupo(idGrupo.toString(), false);
	   });

	   PopUpMenuMap.setSize(140, 0);
	   PopUpMenuMap.bind(element); // target is this pre block
	   PopUpMenuMap.show(e);
	   return false;
	   }

	function openInfoMisPuntos(puntoId){
		// infoWindow html para la solapa 1
    	miPunto = misPuntosHash.get(puntoId.toString());
		html = '<table width="200"><tr>';
		html += ' <td><span class="infoWindowTitle">'+miPunto.nombre+'</span></td>';
        html += ' <td align="right" valign="top">';
		if ((OBJETIVO==3)&&(miPunto.publico==1))
			html += '<img src="images/puntoPublico.gif" width="16" height="16" border="0" title="Punto publicado"/>';
		if (miPunto.seguro==1)
			html += '<img src="images/puntoSeguro.gif" width="16" height="16" border="0" title="Punto seguro"/>';
		html += '</td></tr>';
		html += '<tr><td colspan="2"><span class="inputTEXT">'+miPunto.datos+'</span></td></tr>';
		html += '</table>';

	    tabs = new Array();
    	tabs.push (new GInfoWindowTab("Punto de referencia",html));

    	misPuntosMarkersHash.get(puntoId.toString()).openInfoWindowTabsHtml(tabs);
	}

	function crearMarcaDePunto(point,name,id,icon) {
        marker = new GMarker(point, {icon:icon, title:name});
		if ((id!=null)&&(id!='')){
        	GEvent.addListener(marker, "click", function() {
		    	openInfoMisPuntos(id);
        	});
		}
        return marker;
      }
/*************************FUNCIONES PARA PANTALLA PRINCIPAL************************/

	var reqHandlerMisPuntos = null;

	function ocultarPuntosVisibles(){
		for (i=0; i<misPuntosVisiblesId.length; i++){
			marker = misPuntosMarkersHash.get(misPuntosVisiblesId[i].toString());
			if ((marker!=null)&&(marker!='undefined')){
				marker.hide();
			}
		}
	}

	function mostrarPuntosVisibles(){
		for (i=0; i<misPuntosVisiblesId.length; i++){
			marker = misPuntosMarkersHash.get(misPuntosVisiblesId[i].toString());
			if ((marker!=null)&&(marker!='undefined')){
				marker.show();
			}
		}
	}

	function mostrarPunto(idPunto){
		misPuntosVisiblesId.push(idPunto.toString());
		refreshViewPoints();
	}

	function ocultarPunto(idPunto){
		pos=indexOfArray(misPuntosVisiblesId,idPunto.toString());
		if (pos!=-1)
			misPuntosVisiblesId.splice(pos,1);
		refreshViewPoints();
	}

	function verPuntosSeleccionados(){
		misPuntosVisiblesId = new Array();
		for (i=0; i<puntosSeleccionadosId.length;i++)
			misPuntosVisiblesId[i] = puntosSeleccionadosId[i];
		for (i=0; i<puntosSeleccionadosHeredadosId.length;i++)
			misPuntosVisiblesId.push(puntosSeleccionadosHeredadosId[i]);
		refreshViewPoints();
	}

	function ocultarPuntosSeleccionados(){
		for (i=0;i<puntosSeleccionadosId.length;i++){
			pos=indexOfArray(misPuntosVisiblesId,puntosSeleccionadosId[i].toString());
			if (pos!=-1)
				misPuntosVisiblesId.splice(pos,1);
		}
		for (i=0;i<puntosSeleccionadosHeredadosId.length;i++){
			pos=indexOfArray(misPuntosVisiblesId,puntosSeleccionadosHeredadosId[i].toString());
			if (pos!=-1)
				misPuntosVisiblesId.splice(pos,1);
		}
		refreshViewPoints();
	}

	function printTableMisPuntos(){
		tabla = '<table width="260">';
		tabla += '<tr><td>';

		puntosTree = new dTree('puntosTree');
		puntosTree.add(0,-1,'');

		var misGruposList = misGruposHash.values();
		var misGruposListKeys = misGruposHash.keys();
		for (var i=0; i<misGruposList.length; i++) {
			var groupId = parseInt(misGruposList.id);
			var groupName = '<span class="inputLBL" oncontextmenu="return createPopUpGroup(event,'+misGruposList[i].id+',this);">'+misGruposList[i].nombre+'</span>';
			puntosTree.add(i+1,0,groupName,'','','','js/dtree/img/folder.gif');
		}

		var misPuntosList = misPuntosHash.values();
		for (var i=0; i<misPuntosList.length; i++) {
			if (misPuntosList[i]!='toJSONString'){
				checked = '';
				heredado = false; //es un punto de flota y soy un movil
				if (indexOfArray(puntosSeleccionadosId,misPuntosList[i].id.toString())!=-1)
					checked='checked';
				if (indexOfArray(puntosSeleccionadosHeredadosId,misPuntosList[i].id.toString())!=-1)
					checked='checked';
				if ((OBJETIVO==2)&&(misPuntosList[i].esflota==1))
					heredado=true;
				itemSpan = "";
				if (!heredado){
					itemSpan += '<div style="width:200px; display:inline; vertical-align:middle; top:-10px;" oncontextmenu="return createPopUpPoint(event,'+misPuntosList[i].id+',this);">';
        			checkVal = " <input type='checkbox' name='boxPoints[]' value='"+misPuntosList[i].id+"' "+checked+" onClick='checkedPunto(this);'>";
				}
				else{
					itemSpan += '<div style="width:200px; display:inline; vertical-align:middle; top:-10px; background:#F1F1F1;" oncontextmenu="return createPopUpPoint(event,'+misPuntosList[i].id+',this);>';
					checkVal = " <input type='checkbox' name='boxPoints[]' value='"+misPuntosList[i].id+"' "+checked+" onClick='checkedPuntoHeredado(this);'>";
				}
				itemSpan += '<img src="'+getUrlImgTipoPunto(parseInt(misPuntosList[i].icono))+'" width="16" height="16" border="0"/>';
				itemSpan += '<span class="inputLBL"> ' + misPuntosList[i].nombre + ' </span>';
				//seccion de iconos de estado...
				//SEGURO:
				if (misPuntosList[i].seguro==1){
					itemSpan += '<img src="images/puntoSeguro.gif" width="16" height="16" border="0" title="Punto seguro"/>';
				}
				else
					itemSpan += '<img src="js/dtree/img/empty.gif" width="16" height="16" border="0"/>';
				//PUBLICADO:
				if (OBJETIVO==3) {
					if (misPuntosList[i].publico==1){
						itemSpan += '<img src="images/puntoPublico.gif" width="16" height="16" border="0" title="Punto publicado"/>';
						}
					else
						itemSpan += '<img  src="js/dtree/img/empty.gif" width="16" height="16" border="0"/>';
				}
				//VISIBILIDAD:
				if (indexOfArray(misPuntosVisiblesId,misPuntosList[i].id.toString())!=-1){
					itemSpan += '<img  src="images/puntoVisible.gif" width="12" height="10" border="0" onclick="centrar('+misPuntosList[i].latitud+','+ misPuntosList[i].longitud +'); highlightPointMarker('+misPuntosList[i].id+');" style="cursor:pointer;" title="Punto visible (Click para localizar)"/>';
				}
				else
					itemSpan += '<img  src="js/dtree/img/empty.gif" width="16" height="16" border="0"/>';
				itemSpan+='</div>';

				var posGroup = 0;
				if (parseInt(misPuntosList[i].grupoId)!=0){
					var pos = indexOfArray(misGruposListKeys,misPuntosList[i].grupoId.toString());
					if (pos!=-1)
						posGroup = pos+1;
				}
				var nodeId = i+misGruposList.length+1;
				puntosTree.add(nodeId, posGroup, itemSpan, '', '', '', '', '', false, checkVal);
			}
		}

		document.getElementById('divListaPuntos').innerHTML = puntosTree;
	}


	function refreshViewPoints(){
		var misPuntosList = misPuntosHash.values();
		for (var i=0; i<misPuntosList.length; i++) {
			if (misPuntosList[i]!='toJSONString'){
				auxId = misPuntosList[i].id;
				marker = misPuntosMarkersHash.get(auxId.toString());
				if (indexOfArray(misPuntosVisiblesId,auxId)!=-1){ // Tiene que estar VISIBLE
					if ((marker == null)||(marker=='undefined')){//creo la marca del punto
						//alert(auxId);
			    		miPunto = misPuntosList[i];
						icon = new GIcon();
    					icon.image = getUrlImgTipoPunto(parseInt(miPunto.icono));
		       			icon.iconSize = new GSize(24, 24);
		        		icon.iconAnchor = new GPoint(6, 20);
        				icon.infoWindowAnchor = new GPoint(5, 1);
						point = new GLatLng(parseFloat(miPunto.latitud),parseFloat(miPunto.longitud));
						marker = crearMarcaDePunto(point,miPunto.nombre,miPunto.id,icon);
						misPuntosMarkersHash.put(auxId.toString(),marker);
						map.addOverlay(marker);
						}
					  marker.show();
					}
				else { //tiene que estar OCULTO
					if (marker != null){
					 	marker.hide();
						}
					}
				}
			}
		if (misPuntosList.length>0)
		 	printTableMisPuntos();
		else
			document.getElementById('divListaPuntos').innerHTML = '<span class="inputLBL">No se encontraron puntos registrados.</span>';

	}

	function checkedPunto(check, miPunto){
		if (check.checked)
			puntosSeleccionadosId.push(check.value);
		else {
			pos=indexOfArray(puntosSeleccionadosId,check.value);
			if (pos!=-1)
			    puntosSeleccionadosId.splice(pos,1);
			}
	}

	function checkedPuntoHeredado(check, miPunto){
		if (check.checked)
			puntosSeleccionadosHeredadosId.push(check.value);
		else {
			pos=indexOfArray(puntosSeleccionadosHeredadosId,check.value);
			if (pos!=-1)
			    puntosSeleccionadosHeredadosId.splice(pos,1);
			}
	}

	function OnReadyStateChangeMisPuntos(){
		ready = reqHandlerMisPuntos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			misPuntosJSON = reqHandlerMisPuntos.responseText.parseJSON();
			if (misPuntosJSON.length != 'undefined') {
				for (i=0; i<misPuntosJSON.length; i++){
					misPuntosHash.put(misPuntosJSON[i].id.toString(),misPuntosJSON[i]);
					if(parseInt(misPuntosJSON[i].grupoId)!=0)//el punto pertenece a un grupo
						if (misGruposHash.containsKey(misPuntosJSON[i].grupoId.toString())){
							misGruposHash.get(misPuntosJSON[i].grupoId.toString()).PUNTOSID.push(misPuntosJSON[i].id.toString());
						}
				}
				refreshViewPoints();
			}
		document.getElementById("busyImg").style.visibility = "hidden";
		autoRefreshFlag = 0;
		}
	}

	function CargarMisPuntos() {
    	reqParamsMisPuntos = "COMMAND=MISPUNTOS";
    	reqParamsMisPuntos += "&CUENTA=" + MOVIL_ID;
		if (OBJETIVO == 3)
			reqParamsMisPuntos += "&ESFLOTA=1";
		else
			reqParamsMisPuntos += "&ESFLOTA=0";

    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    	if (msie)
            reqHandlerMisPuntos = new ActiveXObject("Microsoft.XMLHTTP");
        else
            reqHandlerMisPuntos = new XMLHttpRequest();
        reqHandlerMisPuntos.onreadystatechange = OnReadyStateChangeMisPuntos;
        reqHandlerMisPuntos.open("POST", "querycontroller.php", true);
        reqHandlerMisPuntos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		reqHandlerMisPuntos.send(reqParamsMisPuntos);
    }


/*************************FUNCIONES PARA PANTALLA NUEVO PUNTO************************/
	var newPointMarker = null;

	//icono por defecto al marcar un nuevo punto
	var iconPoint = new GIcon();
    	iconPoint.image = "images/gmapIcons/newPoint.png";
        iconPoint.iconSize = new GSize(24, 24);
        iconPoint.iconAnchor = new GPoint(12, 24);
        iconPoint.infoWindowAnchor = new GPoint(12, 24);

	function nuevoPunto() {
		//mostrar panel de nuevo punto
		document.getElementById('newPointTitle').innerHTML = "Nuevo Punto";
		document.getElementById('newPointDesc').innerHTML = "Para crear un nuevo punto de referencia puede buscarlo en el mapa y marcarlo con un 'click' o bien utilizar la busqueda de direcciones por calle y altura provistas en el menu superior."
		hideDiv('div_mispuntosPpal');
		hideDiv('div_searchPunto');
		showDiv('div_nuevoPunto');
		setEstadoNuevoPunto();
		cleanFormNuevoPunto();
	}

	function marcarNuevoPunto(point){
		if (newPointMarker==null){
			newPointMarker = crearMarcaDePunto(point,'NUEVO PUNTO',null,iconPoint);
			map.addOverlay(newPointMarker);
		}
		else {
			newPointMarker.setLatLng(point);
			newPointMarker.show();
		}
		document.getElementById('newLatitud').innerHTML = point.lat().toString().substr(0,11);
		document.getElementById('newLongitud').innerHTML = point.lng().toString().substr(0,11);
	}

	function cleanEstadoNuevoPunto(){ //limpia el mapa del estado "MARCAR NUEVO PUNTO"
		initMapEvents();
		hideDiv('div_nuevoPunto');
		showDiv('div_mispuntosPpal');
		if (newPointMarker!=null){
			map.removeOverlay(newPointMarker);
			newPointMarker=null;
		}
	}

	function setEstadoNuevoPunto(){ //prepara el mapa para el estado "MARCAR NUEVO PUNTO"
		var mapOnClick = function(marker,point){marcarNuevoPunto(point);};
		//mapEventsFunctions.put("click",mapOnClick);
		//mapEventsHandlers.put("click",GEvent.addListener(map,"click",mapOnClick));
		mapActiveCursor = 'crosshair';
		map.getDragObject().setDraggableCursor("crosshair");
	}

	function changeTipoPunto(nuevoTipo){
		iconPoint.image = getUrlImgTipoPunto(parseInt(nuevoTipo));
		if (newPointMarker!=null){
			map.removeOverlay(newPointMarker);
			newPointMarker.getIcon().image = iconPoint.image;
			map.addOverlay(newPointMarker);
		}
	}

	function cleanFormNuevoPunto(){
		hideDiv('newPointErrorDisplay');
		addOptionsToGrupoSelector();
		document.getElementById("newPointErrorDisplay").innerHTML = "";
		document.getElementById('puntoIdHID').value="";
		document.getElementById('newLatitud').innerHTML="";
		document.getElementById('newLongitud').innerHTML="";
		document.getElementById('tipoPunto').value="0";
		document.getElementById('descPunto').value="";
		document.getElementById('nombrePunto').value="";
		document.getElementById('puntoSeguroCHK').checked=false;
		if (OBJETIVO == 3)
			document.getElementById('puntoPublicoCHK').checked=false;
		if (newPointMarker!=null)
			newPointMarker.hide();
		iconPoint.image = getUrlImgTipoPunto(0);
	}

	/*************************FUNCIONES PARA PANTALLA MODIFICAR PUNTO************************/
	//var eventosModificarPunto = new Array();
	var puntoModificar = null;

	function modificarPunto(idPoint) {
		//mostrar panel de modificar punto
			document.getElementById('newPointTitle').innerHTML = "Modificar Punto";
			document.getElementById('newPointDesc').innerHTML = "Para modificar la altura del punto marcarlo con un 'click' arrastrarlo hasta la ubicacion deseada o bien utilizar la busqueda de direcciones por calle y altura provistas en el menu superior."
			hideDiv('div_mispuntosPpal');
			hideDiv('div_searchPunto');
			showDiv('div_nuevoPunto');
			puntoModificar = misPuntosHash.get(idPoint.toString());
			cleanFormModificarPunto();
			setEstadoModificarPunto();
	}

	function setEstadoModificarPunto(){ //prepara el mapa para el estado "MODIFICAR PUNTO"
		ocultarPuntosVisibles();
		//creo la marker para modificar
		point = new GLatLng(parseFloat(puntoModificar.latitud), parseFloat(puntoModificar.longitud));
		newPointMarker = new GMarker(point, {icon:iconPoint, title:puntoModificar.nombre, draggable: true});
		newPointMarker.enableDragging();
		GEvent.addListener(newPointMarker, "drag", function(){
			document.getElementById("newLatitud").innerHTML=newPointMarker.getLatLng().lat().toString().substr(0,11);
			document.getElementById("newLongitud").innerHTML=newPointMarker.getLatLng().lng().toString().substr(0,11);
		});
		map.addOverlay(newPointMarker);
		centrar(parseFloat(puntoModificar.latitud), parseFloat(puntoModificar.longitud));
	}

	function cleanEstadoModificarPunto(){ //limpia el mapa del estado "MODIFICAR PUNTO"
		/*for (i=0; i<eventosModificarPunto.length; i++)
			GEvent.removeListener(eventosModificarPunto[i]);
		eventosModificarPunto = new Array();*/
		initMapEvents();
		hideDiv('div_nuevoPunto');
		showDiv('div_mispuntosPpal');
		map.getDragObject().setDraggableCursor("default");
		puntoModificar = null;
		if (newPointMarker!=null){
			map.removeOverlay(newPointMarker);
			newPointMarker=null;
		}
		mostrarPuntosVisibles();

	}

	function cleanFormModificarPunto(){
		hideDiv('newPointErrorDisplay');
		addOptionsToGrupoSelector();
		document.getElementById("newPointErrorDisplay").innerHTML = "";
		document.getElementById('puntoIdHID').value = puntoModificar.id;
		document.getElementById('newLatitud').innerHTML = puntoModificar.latitud;
		document.getElementById('newLongitud').innerHTML = puntoModificar.longitud;
		document.getElementById('tipoPunto').value = puntoModificar.icono;
		document.getElementById('descPunto').value = puntoModificar.datos;
		document.getElementById('nombrePunto').value = puntoModificar.nombre;
		document.getElementById('gruposPunto').value = puntoModificar.grupoId;
		document.getElementById('puntoSeguroCHK').checked=false;
		if (puntoModificar.seguro==1)
			document.getElementById('puntoSeguroCHK').checked=true;
		if (OBJETIVO == 3){
			document.getElementById('puntoPublicoCHK').checked=false;
			if (puntoModificar.publico==1)
				document.getElementById('puntoPublicoCHK').checked=true;
		}
		iconPoint.image = getUrlImgTipoPunto(parseInt(puntoModificar.icono));
		if (newPointMarker!=null){
			point = new GLatLng(parseFloat(puntoModificar.latitud), parseFloat(puntoModificar.longitud));
			newPointMarker.setLatLng(point);
			map.removeOverlay(newPointMarker);
			newPointMarker.getIcon().image = iconPoint.image;
			map.addOverlay(newPointMarker);
			centrar(parseFloat(puntoModificar.latitud), parseFloat(puntoModificar.longitud));
		}
	}


	//funciones para busqueda y seteo de puntos **************************************************************************************************************

	var geo = new GClientGeocoder();

      // ====== Array for decoding the failure codes ======
      var reasons=[];
      reasons[G_GEO_SUCCESS]            = "Success";
      reasons[G_GEO_MISSING_ADDRESS]    = "Dirección No Encontrada: La direccion falta o carece de valor.";
      reasons[G_GEO_UNKNOWN_ADDRESS]    = "Dirección Desconocida: La ubicación geográfica correspondiente no se ha podido encontrar para los datos especificados.";
      reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Direccion No Disponible: La codificación geográfica de la dirección no pueden ser devuelta debido a razones legales o contractuales";
      reasons[G_GEO_BAD_KEY]            = "Error de Clave: La API es inválida o no coincide con el dominio para la que se asigno";
      reasons[G_GEO_TOO_MANY_QUERIES]   = "Demasiadas Preguntas: La cuota de códigos geográficos asignada a este sitio ha sido superada.";
      reasons[G_GEO_SERVER_ERROR]       = "Error del servidor: La solicitud de geocodificación no pudo ser procesada con éxito.";
      reasons[403]                      = "Error 403: Probablemente error causado por el tratamiento de datos inválidos JSON.";

      // ====== Geocoding ======
      function getPointFromAddress(adress) {
        geo.getLocations(adress, function (result)
          {
            // Si esta todo OK
            if (result.Status.code == G_GEO_SUCCESS) {
              // Asumimos que la primer coordenada encontrada es la correcta
              p = result.Placemark[0].Point.coordinates;
			  // Imprimimos las coordenadas del resultado y localizamos el punto en el mapa
              lat=p[1];
              lng=p[0];
			  point = new GLatLng(lat,lng);
			  if (newPointMarker==null){
				if (puntoModificar==null){
			  		newPointMarker = crearMarcaDePunto(point,'NUEVO PUNTO',null,iconPoint);
					map.addOverlay(newPointMarker);
					}
				else{
					newPointMarker = new GMarker(point, {icon:iconPoint, title:puntoModificar.nombre, draggable: true});
					newPointMarker.enableDragging();
					GEvent.addListener(newPointMarker, "drag", function(){
						document.getElementById("newLatitud").innerHTML=newPointMarker.getLatLng().lat().toString().substr(0,11);
						document.getElementById("newLongitud").innerHTML=newPointMarker.getLatLng().lng().toString().substr(0,11);
						});
					map.addOverlay(newPointMarker);
				    }
			  	}
			  cleanEstadoBuscarPunto();
			  // Volvemos al menu crear punto o modificar punto
			  if (puntoModificar!=null){ //Voy A Modificar
				  hideDiv('div_searchPunto');
				  showDiv('div_nuevoPunto');
				  newPointMarker.setLatLng(point);
			  }
			  else
	              nuevoPunto();
			  document.getElementById('newLatitud').innerHTML = lat.toString().substr(0,11);
		      document.getElementById('newLongitud').innerHTML = lng.toString().substr(0,11);
			  newPointMarker.show();
			  centrar(lat, lng);
            }
            // ====== Decodificar el estado de error ======
            else {
                reason="Code "+result.Status.code;
                if (reasons[result.Status.code]) {
                  reason = reasons[result.Status.code]
                }
                msg = "Error = '" + reason + "'<br>";
                document.getElementById("searchPointErrorDisplay").innerHTML = msg;
				showDiv('searchPointErrorDisplay');
            }
         }
        );
      }

	function backBuscarPunto(){
		cleanEstadoBuscarPunto();
		if ( puntoModificar == null)
			nuevoPunto();
		else
			modificarPunto();
	}

	var BuscarPuntoPolygon1 = null;
	var BuscarPuntoPolygon2 = null;
	var BuscarPuntoPolygon3 = null;
	var BuscarPuntoPolygon4 = null;
	function cleanEstadoBuscarPunto(){
		hideDiv('div_searchPunto');
		if (BuscarPuntoPolygon1!=null){
			map.removeOverlay(BuscarPuntoPolygon1);
			map.removeOverlay(BuscarPuntoPolygon2);
			map.removeOverlay(BuscarPuntoPolygon3);
			map.removeOverlay(BuscarPuntoPolygon4);
			BuscarPuntoPolygon1 = null;
			BuscarPuntoPolygon2 = null;
			BuscarPuntoPolygon3 = null;
			BuscarPuntoPolygon4 = null;
		}
	}

	function setEstadoBuscarPunto(){
	  BuscarPuntoPolygon1 =	new GPolygon([new GLatLng(-85,0),new GLatLng(85,0),new GLatLng(85,90),new GLatLng(-85,90)],null,0,0,"#616161",0.6);
	  map.addOverlay(BuscarPuntoPolygon1);
	  BuscarPuntoPolygon2 = new GPolygon([new GLatLng(-85,90),new GLatLng(85,90),new GLatLng(85,180),new GLatLng(-85,180)],null,0,0,"#616161",0.6);
	  map.addOverlay(BuscarPuntoPolygon2);
      BuscarPuntoPolygon3 = new GPolygon([new GLatLng(-85,180.000001),new GLatLng(85,180.000001),new GLatLng(85,270),new GLatLng(-85,270)],null,0,0,"#616161",0.6);
	  map.addOverlay(BuscarPuntoPolygon3);
      BuscarPuntoPolygon4 = new GPolygon([new GLatLng(-85,270),new GLatLng(85,270),new GLatLng(85,360),new GLatLng(-85,360)],null,0,0,"#616161",0.6);
	  map.addOverlay(BuscarPuntoPolygon4);
	}

	function cleanFormBuscarPunto(){
		hideDiv('searchPointErrorDisplay');
		document.getElementById("searchPointErrorDisplay").innerHTML = "";
		document.getElementById('searchPuntoCalle').value="";
		document.getElementById('searchPuntoAltura').value="";
		document.getElementById('searchPuntoCiudad').value = GEO_CIUDAD;
		document.getElementById("searchPuntoProvincia").value = GEO_PROVINCIA;
		document.getElementById('searchPuntoPais').value= GEO_PAIS;
	}

	function buscarPunto() {
		//mostrar panel de buscar punto
		cleanEstadoNuevoPunto();
		hideDiv('div_mispuntosPpal');
		showDiv('div_searchPunto');
		setEstadoBuscarPunto();
		cleanFormBuscarPunto();
	}

	function validateFormBuscarPunto(){
		errorMsg = '';
		calle = document.getElementById("searchPuntoCalle").value;
		altura = document.getElementById("searchPuntoAltura").value;
		ciudad = document.getElementById("searchPuntoCiudad").value;
		provincia = document.getElementById("searchPuntoProvincia").value;
		pais = document.getElementById("searchPuntoPais").value;
		if (trim(calle)!=''){
			if (!_validString(calle))
				errorMsg += "El campo 'calle' no acepta caracteres especiales.<br>";
			}
		else
			errorMsg += "El campo 'calle' es obligatorio.<br>";

		if (trim(altura)!=''){
			if (!_digits(altura))
				errorMsg += "El campo 'altura' debe ser numerico.<br>";
			}
		else
			errorMsg += "El campo 'altura' es obligatorio.<br>";

		if (trim(ciudad)!=''){
			if (!_validString(ciudad))
				errorMsg += "El campo 'ciudad' no acepta caracteres especiales.<br>";
			}
		else
			errorMsg += "El campo 'ciudad' es obligatorio.<br>";

		if (trim(provincia)!='')
			if (!_validString(provincia))
				errorMsg += "El campo 'provincia' no acepta caracteres especiales.<br>";

		if (trim(pais)!='')
			if (!_validString(pais))
				errorMsg += "El campo 'pais' no acepta caracteres especiales.<br>";

		if (errorMsg == '')
			return true;
		document.getElementById("searchPointErrorDisplay").innerHTML = errorMsg;
		showDiv("searchPointErrorDisplay");
		return false;
	}

	function GSearchPoint(){
		hideDiv('searchPointErrorDisplay');
		document.getElementById("searchPointErrorDisplay").innerHTML = "";
		if (validateFormBuscarPunto()){
			adress = document.getElementById("searchPuntoAltura").value;
			adress += ', ' + document.getElementById("searchPuntoCalle").value;
			adress += ', ' + document.getElementById("searchPuntoAltura").value;
			adress += ', ' + document.getElementById("searchPuntoCiudad").value;
			if (document.getElementById("searchPuntoProvincia").value!='')
				adress += ', ' + document.getElementById("searchPuntoProvincia").value;
			adress += ', ' + document.getElementById("searchPuntoPais").value;
			getPointFromAddress(adress);
			}
	}

	/*************************FUNCIONES PARA GUARDAR EL PUNTO************************/
	var reqHandlerSaveMisPuntos = null;

	function validarNuevoPunto(){
		errorMsg = '';
		lat = document.getElementById("newLatitud").innerHTML;
		lon = document.getElementById("newLongitud").innerHTML;
		tipo = document.getElementById("tipoPunto").value;
		desc = document.getElementById("descPunto").value;
		nombre = document.getElementById("nombrePunto").value;

		if ((trim(lat)=='')||(trim(lon)==''))
			errorMsg += "Debe marcar o buscar un punto antes de guardarlo.<br>";

		if (trim(nombre)!=''){
			if (!_validString(nombre))
				errorMsg += "El campo 'nombre' no acepta caracteres especiales.<br>";
			}
		else
			errorMsg += "El campo 'nombre' es obligatorio.<br>";

		if (tipo=='0')
			errorMsg += "El campo 'tipo' es obligatorio.<br>";

		if (trim(desc)!=''){
			if (!_validString(desc))
				errorMsg += "El campo 'descripcion' no acepta caracteres especiales.<br>";
			}

		if (errorMsg == '')
			return true;
		document.getElementById("newPointErrorDisplay").innerHTML = errorMsg;
		showDiv("newPointErrorDisplay");
		return false;
	}

	function OnReadyStateChangeSaveMisPuntos(){
		ready = reqHandlerSaveMisPuntos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			nuevoPuntoJSON = reqHandlerSaveMisPuntos.responseText.parseJSON();
			if (nuevoPuntoJSON.id != -1) {
				if (puntoModificar==null){
					misPuntosHash.put(nuevoPuntoJSON.id.toString(),nuevoPuntoJSON);
					misPuntosVisiblesId.push(nuevoPuntoJSON.id.toString());
					cleanEstadoNuevoPunto();
				}
				else{
					//modificar gmarker
					var marker = misPuntosMarkersHash.get(nuevoPuntoJSON.id.toString());
					if ((marker!=null)&&(marker!='undefined')){
						point = new GLatLng(parseFloat(nuevoPuntoJSON.latitud),parseFloat(nuevoPuntoJSON.longitud));
						marker.setLatLng(point);
						marker.getIcon().image=getUrlImgTipoPunto(parseInt(nuevoPuntoJSON.icono))
					}
					//borro el punto que se modifico de hash de grupos->PUNTOSID;
					if (parseInt(puntoModificar.grupoId)!=0){
						var group = misGruposHash.get(puntoModificar.grupoId.toString());
						var pos = indexOfArray(group.PUNTOSID,puntoModificar.id);
						if (pos!=-1)
							group.PUNTOSID.splice(pos,1);
					}
					cleanEstadoModificarPunto();
				}
				//agrego el puntoId al hash de grupos->PUNTOSID
				if (parseInt(nuevoPuntoJSON.grupoId)!=0){
					misGruposHash.get(nuevoPuntoJSON.grupoId.toString()).PUNTOSID.push(nuevoPuntoJSON.id.toString());
				}
				refreshViewPoints();
			}
			else{
				document.getElementById('newPointErrorDisplay').innerHTML = 'Ocurrio un error en la DB al tratar de guardar el punto.'
				showDiv('newPointErrorDisplay');
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}

	function guardarPunto() {
		hideDiv('newPointErrorDisplay');
		document.getElementById("newPointErrorDisplay").innerHTML = "";
		if (validarNuevoPunto()){
			es_seguro = 0;
			es_flota = 0;
			es_publico = 0;
			if (OBJETIVO == 3){
				es_flota=1;
				if(document.getElementById('puntoPublicoCHK').checked)
					es_publico = 1;
			}
			if(document.getElementById('puntoSeguroCHK').checked)
				es_seguro = 1;
			var oldGrupo = '0';
			if (puntoModificar!=null)
				oldGrupo = puntoModificar.grupoId;
	    	reqParamsMisPuntos = "COMMAND=SAVE";
    		reqParamsMisPuntos += "&ORDERID="+document.getElementById('puntoIdHID').value;
			reqParamsMisPuntos += "&NOMBRE="+document.getElementById('nombrePunto').value;
	    	reqParamsMisPuntos += "&LATITUD="+document.getElementById('newLatitud').innerHTML;
			reqParamsMisPuntos += "&LONGITUD="+document.getElementById('newLongitud').innerHTML;
    		reqParamsMisPuntos += "&DATOS="+document.getElementById('descPunto').value;
    		reqParamsMisPuntos += "&FLOTAID="+ MOVIL_ID ;
			reqParamsMisPuntos += "&ICONO="+document.getElementById('tipoPunto').value;
	    	reqParamsMisPuntos += "&SEGURO="+es_seguro;
			reqParamsMisPuntos += "&PUBLICO="+es_publico;
			reqParamsMisPuntos += "&ESFLOTA="+es_flota;
			reqParamsMisPuntos += "&GRUPO="+document.getElementById('gruposPunto').value;
			reqParamsMisPuntos += "&OLDGRUPO="+oldGrupo;
    		autoRefreshFlag = 1;
	    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    		if (msie)
        	    reqHandlerSaveMisPuntos = new ActiveXObject("Microsoft.XMLHTTP");
	        else
    	        reqHandlerSaveMisPuntos = new XMLHttpRequest();
			reqHandlerSaveMisPuntos.onreadystatechange = OnReadyStateChangeSaveMisPuntos;
	        reqHandlerSaveMisPuntos.open("POST", "persistirpunto.php", true);
    	    reqHandlerSaveMisPuntos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			reqHandlerSaveMisPuntos.send(reqParamsMisPuntos);
		}
    }

	/*************************FUNCIONES PARA ELIMINAR LOS PUNTOS SELECCIONADOS************************/
	var reqHandlerDeleteMisPuntos = null;
	var deletePuntoId = null;

	function OnReadyStateChangeDeleteMisPuntos(){
		ready = reqHandlerDeleteMisPuntos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			deleteResponse = reqHandlerDeleteMisPuntos.responseText.parseJSON();
			if (deleteResponse){
				if(deletePuntoId==null){ //se ejecuto con minimenu
				 	ocultarPuntosSeleccionados();
				 	//ahora remuevo los puntos y las marcas que ya fueron eliminadas de sus respectivos arrays
				 	for (i=0; i<puntosSeleccionadosId.length; i++){
						misPuntosHash.remove(puntosSeleccionadosId[i].toString());
					 	if (misPuntosMarkersHash.containsKey(puntosSeleccionadosId[i].toString())){
					 		map.removeOverlay(misPuntosMarkersHash.get(puntosSeleccionadosId[i].toString()));
							misPuntosMarkersHash.remove(puntosSeleccionadosId[i].toString());
						}
				 	}
				 	//por ultimo limpio el array de puntos seleccionados.
				 	puntosSeleccionadosId = new Array();
				}
				else{ //se ejecuto con popupmenu
					pos=indexOfArray(puntosSeleccionadosId,deletePuntoId.toString());
				    if (pos!=-1)
						puntosSeleccionadosId.splice(pos,1);
					ocultarPunto(deletePuntoId.toString);
					misPuntosHash.remove(deletePuntoId.toString());
					if (misPuntosMarkersHash.containsKey(deletePuntoId.toString())){
					 	map.removeOverlay(misPuntosMarkersHash.get(deletePuntoId.toString()));
						misPuntosMarkersHash.remove(deletePuntoId.toString());
					}
					deletePuntoId = null;
				}
				refreshViewPoints();
			}
			else {
				alert ("Error en consulta a DB: No se pudo eliminar el/los puntos seleccionados");
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}

	function eliminarPuntos(idPoint) {
		 deletePuntoId = null;
		 if ((puntosSeleccionadosId.length>0)||(idPoint!=null)){
			conf = confirm('Esta a punto de eliminar el/los puntos seleccionados. ¿Desea continuar de todas formas?');
			if (conf){
		    	reqParamsMisPuntos = "COMMAND=DELETE";
				if(idPoint!=null){
	    			reqParamsMisPuntos += "&ORDERID="+idPoint;
					deletePuntoId = idPoint;
				}
				else
					reqParamsMisPuntos += "&ORDERID="+puntosSeleccionadosId.join(",");
    			autoRefreshFlag = 1;
	    		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
	    		if (msie)
    	    	    reqHandlerDeleteMisPuntos = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerDeleteMisPuntos = new XMLHttpRequest();
	        	reqHandlerDeleteMisPuntos.onreadystatechange = OnReadyStateChangeDeleteMisPuntos;
		        reqHandlerDeleteMisPuntos.open("POST", "persistirpunto.php", true);
    		    reqHandlerDeleteMisPuntos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerDeleteMisPuntos.send(reqParamsMisPuntos);
			}
		 }
		 else
		 	alert ('Debe seleccionar por lo menos un punto para poder realizar esta operacion.');
    }

	/*************************FUNCIONES PARA PUBLICAR/DESPUBLICAR LOS PUNTOS SELECCIONADOS************************/
	var reqHandlerPublicarMisPuntos = null;
	var publicarPuntoId = null;

	function OnReadyStateChangePublicarMisPuntos(){
		ready = reqHandlerPublicarMisPuntos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			publicarResponse = reqHandlerPublicarMisPuntos.responseText.parseJSON();
			if ((publicarResponse!=null)&&(publicarResponse!=-1)&&(publicarResponse!='undefined')){ // se pudo realizar la operacion, retorna 1 si se publico y 0 si se des-publico.
				if(publicarPuntoId==null){ //se ejecuto con minimenu
					//ahora cambio el valor de los puntos por el devuelto (0 o 1)
				 	for (i=0; i<puntosSeleccionadosId.length; i++){
					 	temp = misPuntosHash.get(puntosSeleccionadosId[i].toString());
					 	if ((temp!=null)&&(temp!='undefined'))
					 		temp.publico = publicarResponse;
				 	}
				}
				else { //se ejecuto con POPUP MENU
					if(misPuntosHash.containsKey(publicarPuntoId.toString()))
					    misPuntosHash.get(publicarPuntoId.toString()).publico = publicarResponse;
					publicarPuntoId = null;
				}
				refreshViewPoints();
			}
			else {
				alert ("Error en consulta a DB: No se pudo publicar el/los puntos seleccionados");
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}

	function publicarPuntos(publicar, idPoint) { //si publicar=true los puntos se publican, caso contrario se des-publican
		 publicarPuntoId = null;
		 if ((puntosSeleccionadosId.length>0)||(idPoint!=null)){
			msj = 'Esta a punto de publicar el/todos los puntos seleccionados. ¿Desea continuar de todas formas?';
			if (!publicar)
				msj = 'Esta a punto de dejar de publicar el/los puntos seleccionados. ¿Desea continuar de todas formas?';
			conf = confirm(msj);
			if (conf){
				valuePub=0;
				if (publicar)
					valuePub=1;
		    	reqParamsMisPuntos = "COMMAND=PUBLICAR";
				if(idPoint!=null){
    				reqParamsMisPuntos += "&ORDERID="+idPoint.toString();
					publicarPuntoId = idPoint.toString();
				}
				else
					reqParamsMisPuntos += "&ORDERID="+puntosSeleccionadosId.join(",");
				reqParamsMisPuntos += "&PUBLICAR="+valuePub;
    			autoRefreshFlag = 1;
	    		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
	    		if (msie)
    	    	    reqHandlerPublicarMisPuntos = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerPublicarMisPuntos = new XMLHttpRequest();
	        	reqHandlerPublicarMisPuntos.onreadystatechange = OnReadyStateChangePublicarMisPuntos;
		        reqHandlerPublicarMisPuntos.open("POST", "persistirpunto.php", true);
    		    reqHandlerPublicarMisPuntos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerPublicarMisPuntos.send(reqParamsMisPuntos);
			}
		 }
		 else
		 	alert ('Debe seleccionar por lo menos un punto para poder realizar esta operacion.');
    }

	/*************************FUNCIONES PARA MARCAR PUNTOS COMO SEGURO/INSEGURO LOS PUNTOS SELECCIONADOS************************/
	var reqHandlerSeguroMisPuntos = null;
	var seguroPuntoId = null;

	function OnReadyStateChangeSeguroMisPuntos(){
		ready = reqHandlerSeguroMisPuntos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			seguroResponse = reqHandlerSeguroMisPuntos.responseText.parseJSON();
			if ((seguroResponse!=null)&&(seguroResponse!=-1)&&(seguroResponse!='undefined')){ // se pudo realizar la operacion, retorna 1 si se publico y 0 si se des-publico.
				if(seguroPuntoId==null){ //se ejecuto desde minimenu
				 	//ahora cambio el valor de los puntos por el devuelto (0 o 1)
				 	for (i=0; i<puntosSeleccionadosId.length; i++){
						temp = misPuntosHash.get(puntosSeleccionadosId[i].toString());
					 	if ((temp!=null)&&(temp!='undefined'))
					 		temp.seguro = seguroResponse;
				 	}
				}
				else { //se ejecuto desde POPUP MENU
					if(misPuntosHash.containsKey(seguroPuntoId.toString()))
					    misPuntosHash.get(seguroPuntoId.toString()).seguro = seguroResponse;
					seguroPuntoId = null;
				}
				refreshViewPoints();
			}
			else {
				alert ("Error en consulta a DB: No se pudo marcar/desmarcar como seguro a el/los puntos seleccionados");
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}

	function seguroPuntos(seguro, idPoint) { //si seguro=true los puntos se marcan como seguros, caso contrario se des-aseguran
		 seguroPuntoId = null;
		 if ((puntosSeleccionadosId.length>0)||(idPoint!=null)){
			msj = 'Esta a punto de marcar como seguro a el/los puntos seleccionados. ¿Desea continuar de todas formas?';
			if (!seguro)
				msj = 'Esta a punto de desmarcar como seguro a el/los puntos seleccionados. ¿Desea continuar de todas formas?';
			conf = confirm(msj);
			if (conf){
				valuePub=0;
				if (seguro)
					valuePub=1;
		    	reqParamsMisPuntos = "COMMAND=SEGURO";
				if (idPoint!=null){
					reqParamsMisPuntos += "&ORDERID="+idPoint.toString();
					seguroPuntoId = idPoint.toString();
				}
				else
	    			reqParamsMisPuntos += "&ORDERID="+puntosSeleccionadosId.join(",");
				reqParamsMisPuntos += "&SEGURO="+valuePub;
    			autoRefreshFlag = 1;
	    		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
	    		if (msie)
    	    	    reqHandlerSeguroMisPuntos = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerSeguroMisPuntos = new XMLHttpRequest();
	        	reqHandlerSeguroMisPuntos.onreadystatechange = OnReadyStateChangeSeguroMisPuntos;
		        reqHandlerSeguroMisPuntos.open("POST", "persistirpunto.php", true);
    		    reqHandlerSeguroMisPuntos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerSeguroMisPuntos.send(reqParamsMisPuntos);
			}
		 }
		 else
		 	alert ('Debe seleccionar por lo menos un punto para poder realizar esta operacion.');
    }

	/*************************FUNCIONES PARA CONFIGURAR COMO VISIBLES POR DEFECTO A LOS PUNTOS SELECCIONADOS************************/
	var reqHandlerDefaultMisPuntos = null;

	function OnReadyStateChangeDefaultMisPuntos(){
		ready = reqHandlerDefaultMisPuntos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}

	function defaultPuntosSeleccionados() {
			msj = 'Esta a punto de configurar el/todos los puntos seleccionados como visible por defecto. ¿Desea continuar de todas formas?';
			conf = confirm(msj);
			if (conf){
		    	reqParamsMisPuntos = "COMMAND=CHANGEPUNTOS";
				reqParamsMisPuntos += "&CUENTA="+ UNIQUE_ID;
				if (OBJETIVO == 3)
					reqParamsMisPuntos += "&ESFLOTA=1";
				else
					reqParamsMisPuntos += "&ESFLOTA=0";
				reqParamsMisPuntos += "&PUNTOSID="+puntosSeleccionadosId.toString();
    			autoRefreshFlag = 1;
	    		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
	    		if (msie)
    	    	    reqHandlerDefaultMisPuntos = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerDefaultMisPuntos = new XMLHttpRequest();
	        	reqHandlerDefaultMisPuntos.onreadystatechange = OnReadyStateChangeDefaultMisPuntos;
		        reqHandlerDefaultMisPuntos.open("POST", "sections/queryConfig.php", true);
    		    reqHandlerDefaultMisPuntos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerDefaultMisPuntos.send(reqParamsMisPuntos);
			}
    }

//*********************** TRATAMIENTO DE GRUPOS *******************************//
	var reqHandlerMisGrupos;
	var grupoModificar = null;

	function nuevoGrupo(){
		//mostrar panel de nuevo grupo
		document.getElementById('newGroupTitle').innerHTML = "Nuevo Grupo";
		document.getElementById('newGroupDesc').innerHTML = "Los grupos se utilizan para almacenar puntos que tienen caracteristicas en comun. Sugerimos que les coloque un nombre representativo.";
		hideDiv('div_mispuntosPpal');
		showDiv('div_nuevoGrupo');
		cleanFormNuevoGrupo();
	}

	function modificarGrupo(idGrupo){
		document.getElementById('newGroupTitle').innerHTML = "Modificar Grupo";
		document.getElementById('newGroupDesc').innerHTML = "";
		hideDiv('div_mispuntosPpal');
		showDiv('div_nuevoGrupo');
		grupoModificar = misGruposHash.get(idGrupo.toString());
		cleanFormModificarGrupo();
	}

	function cleanFormNuevoGrupo(){
		hideDiv('newGroupErrorDisplay');
		document.getElementById("newGroupErrorDisplay").innerHTML = "";
		document.getElementById('grupoIdHID').value="";
		document.getElementById('descGrupo').value="";
		document.getElementById('nombreGrupo').value="";
	}

	function cleanFormModificarGrupo(){
		hideDiv('newGroupErrorDisplay');
		document.getElementById("newGroupErrorDisplay").innerHTML = "";
		document.getElementById('grupoIdHID').value=grupoModificar.id;
		document.getElementById('descGrupo').value=grupoModificar.datos;
		document.getElementById('nombreGrupo').value=grupoModificar.nombre;
	}

	function cleanEstadoNuevoGrupo(){ //limpia el mapa del estado "MODIFICAR/NUEVO GRUPO"
		hideDiv('div_nuevoGrupo');
		showDiv('div_mispuntosPpal');
	}

	function OnReadyStateChangeMisGrupos(){
		ready = reqHandlerMisGrupos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			misGruposJSON = reqHandlerMisGrupos.responseText.parseJSON();
			if (misGruposJSON.length != 'undefined') {
				for (i=0; i<misGruposJSON.length; i++)
					misGruposHash.put(misGruposJSON[i].id.toString(),misGruposJSON[i]);
			}
		document.getElementById("busyImg").style.visibility = "hidden";
		autoRefreshFlag = 0;
		CargarMisPuntos();
		}
	}

	function CargarMisGrupos() {
    	reqParamsMisGrupos = "COMMAND=MISGRUPOS";
    	reqParamsMisGrupos += "&CUENTA=" + MOVIL_ID;
		if (OBJETIVO == 3)
			reqParamsMisGrupos += "&ESFLOTA=1";
		else
			reqParamsMisGrupos += "&ESFLOTA=0";
    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    	if (msie)
            reqHandlerMisGrupos = new ActiveXObject("Microsoft.XMLHTTP");
        else
            reqHandlerMisGrupos = new XMLHttpRequest();
        reqHandlerMisGrupos.onreadystatechange = OnReadyStateChangeMisGrupos;
        reqHandlerMisGrupos.open("POST", "querycontroller.php", true);
        reqHandlerMisGrupos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		reqHandlerMisGrupos.send(reqParamsMisGrupos);
    }

	function validarNuevoGrupo(){
		errorMsg = '';
		desc = document.getElementById("descGrupo").value;
		nombre = document.getElementById("nombreGrupo").value;

		if (trim(nombre)!=''){
			if (!_validString(nombre))
				errorMsg += "El campo 'nombre' no acepta caracteres especiales.<br>";
			}
		else
			errorMsg += "El campo 'nombre' es obligatorio.<br>";

		if (trim(desc)!=''){
			if (!_validString(desc))
				errorMsg += "El campo 'descripcion' no acepta caracteres especiales.<br>";
			}

		if (errorMsg == '')
			return true;
		document.getElementById("newGroupErrorDisplay").innerHTML = errorMsg;
		showDiv("newGroupErrorDisplay");
		return false;
	}

	var reqHandlerSaveMisGrupos;
	function OnReadyStateChangeSaveMisGrupos(){
		ready = reqHandlerSaveMisGrupos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			nuevoGrupoJSON = reqHandlerSaveMisGrupos.responseText.parseJSON();
			if (nuevoGrupoJSON.id != -1) {
				misGruposHash.put(nuevoGrupoJSON.id.toString(),nuevoGrupoJSON);
				alert('Grabacion realizada con exito!');
				cleanEstadoNuevoGrupo();
				refreshViewPoints();
			}
			else{
				document.getElementById('newGroupErrorDisplay').innerHTML = 'Ocurrio un error en la DB al tratar de guardar el grupo.'
				showDiv('newGroupErrorDisplay');
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}

	function guardarGrupo() {
		hideDiv('newGroupErrorDisplay');
		document.getElementById("newGroupErrorDisplay").innerHTML = "";
		if (validarNuevoGrupo()){
			es_flota = 0;
			if (OBJETIVO == 3){
				es_flota=1;
			}
	    	reqParamsMisGrupos = "COMMAND=SAVEGROUP";
    		reqParamsMisGrupos += "&ORDERID="+document.getElementById('grupoIdHID').value;
			reqParamsMisGrupos += "&NOMBRE="+document.getElementById('nombreGrupo').value;
    		reqParamsMisGrupos += "&DATOS="+document.getElementById('descGrupo').value;
    		reqParamsMisGrupos += "&FLOTAID="+MOVIL_ID;
			reqParamsMisGrupos += "&ESFLOTA="+es_flota;
    		autoRefreshFlag = 1;
	    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    		if (msie)
        	    reqHandlerSaveMisGrupos = new ActiveXObject("Microsoft.XMLHTTP");
	        else
    	        reqHandlerSaveMisGrupos = new XMLHttpRequest();
			reqHandlerSaveMisGrupos.onreadystatechange = OnReadyStateChangeSaveMisGrupos;
	        reqHandlerSaveMisGrupos.open("POST", "persistirpunto.php", true);
    	    reqHandlerSaveMisGrupos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			reqHandlerSaveMisGrupos.send(reqParamsMisGrupos);
		}
    }

	var reqHandlerDeleteMisGrupos = null;
	var deleteGrupoId = null;

	function OnReadyStateChangeDeleteMisGrupos(){
		ready = reqHandlerDeleteMisGrupos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			deleteResponse = reqHandlerDeleteMisGrupos.responseText.parseJSON();
			if (deleteResponse){
				if(deleteGrupoId!=null){ //se ejecuto con minimenu
					grupo = misGruposHash.get(deleteGrupoId.toString());

				 	//ahora remuevo los puntos y las marcas que ya fueron eliminadas de sus respectivos arrays
					for (var i=0; i<grupo.PUNTOSID.length; i++)
						misPuntosHash.get(grupo.PUNTOSID[i].toString()).grupoId=0;	//dejo los puntos en el directorio raiz...
				 	/*for (var i=0; i<grupo.PUNTOSID.length; i++){
						misPuntosHash.remove(grupo.PUNTOSID[i].toString());
					 	if (misPuntosMarkersHash.containsKey(grupo.PUNTOSID[i].toString())){
					 		map.removeOverlay(misPuntosMarkersHash.get(grupo.PUNTOSID[i].toString()));
							misPuntosMarkersHash.remove(grupo.PUNTOSID[i].toString());
						}
						var pos=indexOfArray(puntosSeleccionadosId,grupo.PUNTOSID[i].toString());
				    	if (pos!=-1)
							puntosSeleccionadosId.splice(pos,1);
				 	}*/
					misGruposHash.remove(deleteGrupoId.toString());
					deleteGrupoId = null;
				}
				refreshViewPoints();
			}
			else {
				alert ("Error en consulta a DB: No se pudo eliminar el/los grupos seleccionados");
			}
			document.getElementById("busyImg").style.visibility = "hidden";
			autoRefreshFlag = 0;
		}
	}

	function eliminarGrupos(idGrupo) {
			deleteGrupoId = null;
			conf = confirm('Esta a punto de eliminar el/los grupos seleccionados y todos los puntos que este contiene. ¿Desea continuar de todas formas?');
			if (conf){
		    	reqParamsMisGrupos = "COMMAND=DELETEGROUP";
	    		reqParamsMisGrupos += "&ORDERID="+idGrupo;
				deleteGrupoId = idGrupo;
    			autoRefreshFlag = 1;
	    		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
	    		if (msie)
    	    	    reqHandlerDeleteMisGrupos = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerDeleteMisGrupos = new XMLHttpRequest();
	        	reqHandlerDeleteMisGrupos.onreadystatechange = OnReadyStateChangeDeleteMisGrupos;
		        reqHandlerDeleteMisGrupos.open("POST", "persistirpunto.php", true);
    		    reqHandlerDeleteMisGrupos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerDeleteMisGrupos.send(reqParamsMisGrupos);
			}
    }

	function checkedGrupo(idGrupo, checkedValue){
		var fields = document.getElementsByName('boxPoints[]');
		var groupPoints = misGruposHash.get(idGrupo.toString()).PUNTOSID;
		for (i = 0; i < fields.length; i++)
			if (fields[i].checked!=checkedValue){
				var pos=indexOfArray(groupPoints,fields[i].value.toString());
				if (pos!=-1)
					fields[i].click();
			}
	}

